home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / prolog_2.zip / PUZZLES.ZIP / DIF.PRO < prev    next >
Text File  |  1986-07-20  |  1KB  |  53 lines

  1. /* 
  2. This program performs symbolic differentiation. 
  3.  
  4. Sample forms to differentiate:
  5.  
  6.   ?-d(x+1,x,X).
  7.   ?-d(x*x-2,x,X).
  8.   ?-dif( 3*x, x, F ), simp( F, E ).
  9.   ?-dif( 3*x+4, x, F ), simp( F, E ).
  10. "simp" simplifies by providing alternate forms for an expression.
  11. See C & M for more on this. 
  12. */
  13.  
  14.  
  15. ?-op( 9, fx, '%' ).
  16. /* For types PD and ED only: */
  17. ?-op( 9, xfx, '**' ).
  18.  
  19. d(X,X,1) :- !.
  20. d(C,X,0) :- atomic(C).
  21. d(%U, X, %A) :- d( U, X, A ).
  22. d( U+V, X, A+B) :- d(U,X,A), d(V,X,B).
  23. d( U-V, X, A-B ) :- d(U,X,A), d(V,X,B).
  24. d(C*U,X,C*A) :- atomic(C), C \= X, d(U,X,A), !.
  25. d(U*V,X,B*U+A*V) :- d(U,X,A), d(V,X,B).
  26. d(U/V,X,A) :- d(U*V**(%1),X,A).
  27.  
  28.  
  29. d(U**V,X,V*W*U**(V-1)) :- alpha, atomic(V), c \= X, d(U,X,W).
  30.  
  31. d(log(U),X,A*U**(%1)) :- d(U,X,A). 
  32.  
  33. simp(E,E) :- atomic(E), !.
  34. simp(E,F) :- 
  35.     E =.. [Op, La, Ra],
  36.     simp( La, X ),
  37.     simp( Ra, Y ),
  38.     s( Op, X, Y, F ).
  39.  
  40. s( +, X, 0, X ).
  41. s( +, 0, X, X ).
  42. s( +, X, Y, X + Y ).
  43. s( *, _, 0, 0 ).
  44. s( *, 0, _, 0 ).
  45. s( *, 1, X, X ).
  46. s( *, X, 1, X ).
  47. s(*, X, Y, X * Y ).
  48. s( +, X, Y, Z ) :- integer(X), integer(Y), Z is X + Y.
  49. s( *, X*Y,W, X*Z) :- integer(Y), integer(W), Z is Y*W.
  50.  
  51.  
  52.  
  53.